from django.contrib.auth.models import User
from django.db import models

# Create your models here.
from utils.modelsMixin import ModelSetMixin, DateTimeModelMixin


class UserDetail(ModelSetMixin):
    SEX_CHOICES = (
        (0, '女'), (1, "男")
    )
    avatar = models.ImageField(null=True, blank=True, verbose_name='头像', upload_to='user/')
    sex = models.IntegerField(null=True, blank=True, verbose_name="性别", choices=SEX_CHOICES)
    birthday = models.DateField(null=True, blank=True, verbose_name="生日")
    phone = models.CharField(null=True, blank=True, verbose_name="手机号码", max_length=11, unique=True)
    user = models.OneToOneField(User, on_delete=models.CASCADE)


class Area(models.Model):
    name = models.CharField(max_length=20, verbose_name="名称")
    # 省份 城市 区/乡镇 详细地址街道
    # 层级关系
    parent = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True, verbose_name="上级行政区划")

    class Meta:
        # app名_类名
        db_table = 'area'  # 自定义表名
        verbose_name = "行政区划"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name


class Address(DateTimeModelMixin):
    name = models.CharField(max_length=40, verbose_name="地址名称")
    receiver = models.CharField(max_length=40, verbose_name='收货人')
    mobile = models.CharField(max_length=11, verbose_name="手机号码")
    province = models.ForeignKey(
        Area,
        on_delete=models.PROTECT,
        verbose_name="省",
        related_name='province_addresses'
    )
    city = models.ForeignKey(
        Area,
        on_delete=models.PROTECT,
        verbose_name="市",
        related_name='city_addresses'
    )
    district = models.ForeignKey(
        Area,
        on_delete=models.PROTECT,
        verbose_name="区",
        related_name='district_addresses'
    )
    place = models.CharField(max_length=40, verbose_name="详情地址")
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户")

    class Meta:
        ordering = ['-update_time']
        verbose_name = "收货地址"
        verbose_name_plural = verbose_name
